{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#导入必要的包\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = pd.read_csv(\"./RentListingInquries_FE_train.csv\")\n",
    "test = pd.read_csv(\"./RentListingInquries_FE_test.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "49352"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = train[:2000]\n",
    "test = test[:1000]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "\n",
       "[2 rows x 228 columns]"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.0</td>\n",
       "      <td>1475.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>950.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950           1475.0          1475.0        0.0   \n",
       "1        1.0         2   2850           1425.0           950.0       -1.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "\n",
       "[2 rows x 227 columns]"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,u'Number of occurrences')"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cd0f5c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level)\n",
    "pyplot.xlabel(\"degree\")\n",
    "pyplot.ylabel(\"Number of occurrences\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# train.interest_level"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = train.drop(['interest_level'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       4.5  2016      6   24  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   12  ...         0     0      0    0       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "\n",
       "[2 rows x 227 columns]"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.00000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.0</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.00000</td>\n",
       "      <td>2000.0</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.0</td>\n",
       "      <td>2000.00000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.193250</td>\n",
       "      <td>1.513000</td>\n",
       "      <td>3541.292000</td>\n",
       "      <td>1586.339399</td>\n",
       "      <td>1567.38471</td>\n",
       "      <td>-0.319750</td>\n",
       "      <td>2.706250</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.202000</td>\n",
       "      <td>15.763500</td>\n",
       "      <td>...</td>\n",
       "      <td>0.001000</td>\n",
       "      <td>0.00250</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.173500</td>\n",
       "      <td>0.009000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.02250</td>\n",
       "      <td>0.003000</td>\n",
       "      <td>0.001000</td>\n",
       "      <td>0.000500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.505131</td>\n",
       "      <td>1.100198</td>\n",
       "      <td>1931.386919</td>\n",
       "      <td>616.243198</td>\n",
       "      <td>816.37148</td>\n",
       "      <td>0.951624</td>\n",
       "      <td>1.423235</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.602808</td>\n",
       "      <td>8.219023</td>\n",
       "      <td>...</td>\n",
       "      <td>0.031615</td>\n",
       "      <td>0.04995</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.378774</td>\n",
       "      <td>0.094464</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.14834</td>\n",
       "      <td>0.054704</td>\n",
       "      <td>0.031615</td>\n",
       "      <td>0.022361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>695.000000</td>\n",
       "      <td>327.272727</td>\n",
       "      <td>461.50000</td>\n",
       "      <td>-4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2495.000000</td>\n",
       "      <td>1200.000000</td>\n",
       "      <td>1065.00000</td>\n",
       "      <td>-1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3065.000000</td>\n",
       "      <td>1497.500000</td>\n",
       "      <td>1357.87500</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3995.000000</td>\n",
       "      <td>1800.000000</td>\n",
       "      <td>1917.50000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.125000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>10.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>22000.000000</td>\n",
       "      <td>9375.000000</td>\n",
       "      <td>18750.00000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.00000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         bathrooms     bedrooms         price  price_bathrooms  \\\n",
       "count  2000.000000  2000.000000   2000.000000      2000.000000   \n",
       "mean      1.193250     1.513000   3541.292000      1586.339399   \n",
       "std       0.505131     1.100198   1931.386919       616.243198   \n",
       "min       0.000000     0.000000    695.000000       327.272727   \n",
       "25%       1.000000     1.000000   2495.000000      1200.000000   \n",
       "50%       1.000000     1.000000   3065.000000      1497.500000   \n",
       "75%       1.000000     2.000000   3995.000000      1800.000000   \n",
       "max      10.000000     6.000000  22000.000000      9375.000000   \n",
       "\n",
       "       price_bedrooms    room_diff     room_num    Year        Month  \\\n",
       "count      2000.00000  2000.000000  2000.000000  2000.0  2000.000000   \n",
       "mean       1567.38471    -0.319750     2.706250  2016.0     4.202000   \n",
       "std         816.37148     0.951624     1.423235     0.0     0.602808   \n",
       "min         461.50000    -4.000000     0.000000  2016.0     4.000000   \n",
       "25%        1065.00000    -1.000000     2.000000  2016.0     4.000000   \n",
       "50%        1357.87500     0.000000     2.000000  2016.0     4.000000   \n",
       "75%        1917.50000     0.000000     3.125000  2016.0     4.000000   \n",
       "max       18750.00000     8.000000    12.000000  2016.0     6.000000   \n",
       "\n",
       "               Day     ...           virtual        walk   walls          war  \\\n",
       "count  2000.000000     ...       2000.000000  2000.00000  2000.0  2000.000000   \n",
       "mean     15.763500     ...          0.001000     0.00250     0.0     0.173500   \n",
       "std       8.219023     ...          0.031615     0.04995     0.0     0.378774   \n",
       "min       1.000000     ...          0.000000     0.00000     0.0     0.000000   \n",
       "25%       9.000000     ...          0.000000     0.00000     0.0     0.000000   \n",
       "50%      15.000000     ...          0.000000     0.00000     0.0     0.000000   \n",
       "75%      22.000000     ...          0.000000     0.00000     0.0     0.000000   \n",
       "max      30.000000     ...          1.000000     1.00000     0.0     1.000000   \n",
       "\n",
       "            washer   water  wheelchair         wifi      windows         work  \n",
       "count  2000.000000  2000.0  2000.00000  2000.000000  2000.000000  2000.000000  \n",
       "mean      0.009000     0.0     0.02250     0.003000     0.001000     0.000500  \n",
       "std       0.094464     0.0     0.14834     0.054704     0.031615     0.022361  \n",
       "min       0.000000     0.0     0.00000     0.000000     0.000000     0.000000  \n",
       "25%       0.000000     0.0     0.00000     0.000000     0.000000     0.000000  \n",
       "50%       0.000000     0.0     0.00000     0.000000     0.000000     0.000000  \n",
       "75%       0.000000     0.0     0.00000     0.000000     0.000000     0.000000  \n",
       "max       1.000000     0.0     1.00000     1.000000     1.000000     1.000000  \n",
       "\n",
       "[8 rows x 227 columns]"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    #这是一个三类分的问题\n",
    "    xgb_param['num_class'] = 3\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类，将数据匹配成模型需要的数据类型\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "    #确定弱学习器的数目和迭代次数，调用train或者CV    \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5,shuffle=True,random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "xgb1 = XGBClassifier(\n",
    "    learning_rate=0.1,\n",
    "    n_estimators=1000,\n",
    "    max_depth=5,\n",
    "    min_child_weight=1,\n",
    "    gamma=0,\n",
    "    #行列采样\n",
    "    subsample=0.3,\n",
    "    colsample_bytree=0.8,\n",
    "    colsample_bylevel=0.7,\n",
    "    #多类分问题，所以采用的是下面这个，logloss，所以是概率\n",
    "    objective='multi:softprob',\n",
    "    seed=3)\n",
    "modelfit(xgb1,X_train,y_train,cv_folds=kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11483400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "47"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cvresult.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11483550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "#从上图可以看出，从40以后，变化就不是很大了\n",
    "cvresult = cvresult.iloc[20:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(20,cvresult.shape[0]+20)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
